<?php

/***************************************************************
 *  Copyright notice
*
*  (c) 2011 Florian Müller <it-admin@ifp-potsdam.co>, IFP
*
*  All rights reserved
*
*  This script is part of the TYPO3 project. The TYPO3 project is
*  free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 3 of the License, or
*  (at your option) any later version.
*
*  The GNU General Public License can be found at
*  http://www.gnu.org/copyleft/gpl.html.
*
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/


/**
 * Repository for Tx_IfpCurriculum2_Domain_Model_Anmeldung
 */
class Tx_IfpCurriculum2_Domain_Repository_AnmeldungRepository extends Tx_Extbase_Persistence_Repository {
	/**
	 * @var Tx_Extbase_Configuration_ConfigurationManagerInterface
	 */
	protected 	$configurationManager;
	/**
	 *
	 * Returns the list of parent page-UIDs.
	 * @return array<integer> The list of parent page-UIDs
	 *
	 */
	Protected Function getPidList() {
		$extbaseFrameworkConfiguration = $configurationManager->getConfiguration(Tx_Extbase_Configuration_ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
		Return t3lib_div::intExplode(',', $extbaseFrameworkConfiguration['persistence']['storagePid']);
	}



	/**
	 *
	 * Generates a custom MySQL query.
	 *
	 * @param  string $sql A SQL query template
	 * @return string      The SQL query.
	 *
	 */

	Protected Function getQuery($sql) {
		Return str_replace('###PIDS###', implode(',',$this->getPidList()), $sql);
	}



	/**
	 *
	 * Generates a customer MySQL query with page navigation.
	 *
	 * @param  string  $sql          A SQL query template
	 * @param  integer $page         The current page
	 * @param  integer $itemsPerPage The amount of items per page
	 * @return string                The SQL query
	 *
	 */

	Protected Function getPaginatedQuery($sql, $page, $itemsPerPage) {
		Return $this->getQuery($sql) . " LIMIT ".intval(($page-1)*$itemsPerPage).", ".intval($itemsPerPage);
	}
	/**
	 *
	 * Enter description here ...
	 * @param Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung
	 * @param Tx_IfpCurriculum2_Domain_Model_Teilnehmer $teilnehmer
	 * @return boolean
	 */
	public function isAngemeldet(Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung, Tx_IfpCurriculum2_Domain_Model_Teilnehmer $teilnehmer){
		$query = $this->createQuery();
		if( $query->matching($query->logicalAnd($query->equals('veranstaltung',$veranstaltung),$query->like('teilnehmer',$teilnehmer),$query->equals('stornierungszeitpunkt','')))->count()>0){
			return true;
		}
		return false;
	}

	public function findMy(){
		$teilnehmerRepository = t3lib_div::makeInstance('Tx_IfpCurriculum2_Domain_Repository_TeilnehmerRepository');
		$teilnehmer=$teilnehmerRepository->getTeilnehmer();
		$query = $this->createQuery();
		//return $query->matching($query->logicalAnd($query->equals('teilnehmer',$teilnehmer),$query->like('teilnehmer',$teilnehmer)))->setOrderings(array("veranstaltung.erstbeginn"=>Tx_Extbase_Persistence_QueryInterface::ORDER_DESCENDING))->execute();
		return $query->matching($query->logicalAnd($query->equals('teilnehmer',$teilnehmer),$query->like('teilnehmer',$teilnehmer),$query->equals('stornierungszeitpunkt',0)))->execute();

	}
	/**
	 *
	 * Enter description here ...
	 * @param Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung
	 */
	public function countAnmeldungbyVeranstaltung(Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung) {
		$query = $this->createQuery();
		//return $query->matching($query->logicalAnd($query->equals('teilnehmer',$teilnehmer),$query->like('teilnehmer',$teilnehmer)))->setOrderings(array("veranstaltung.erstbeginn"=>Tx_Extbase_Persistence_QueryInterface::ORDER_DESCENDING))->execute();
		return $query->matching($query->logicalAnd($query->equals('veranstaltung',$veranstaltung),$query->equals('stornierungszeitpunkt',"")))->count();

	}
	/**
	 * liefert alle validen
	 * @var string
	 */
	Const QUERY_ANMELDUNG =
		'SELECT a.*
		 FROM   tx_ifpcurriculum2_domain_model_anmeldung 		a
		        JOIN tx_ifpcurriculum2_domain_model_teilnehmer 	t ON a.teilnehmer = t.uid
		        Left JOIN fe_users                            	u ON u.uid = t.feuser
		 WHERE  a.veranstaltung=?  AND a.deleted + t.deleted = 0 AND a.pid IN (###PIDS###) AND t.pid IN (###PIDS###)
		 GROUP BY a.uid
		 ORDER BY u.name,t.nachname,t.vorname DESC';

	/**
	 * liefert alle validen
	 * @var string
	 */
	Const QUERY_VALID_ANMELDUNG =
		'SELECT a.*
		 FROM   tx_ifpcurriculum2_domain_model_anmeldung 		a
		        JOIN tx_ifpcurriculum2_domain_model_teilnehmer 	t ON a.teilnehmer = t.uid
		        Left JOIN fe_users                            	u ON u.uid = t.feuser
		 WHERE  a.veranstaltung=? AND a.stornierungszeitpunkt="" ###FEUSER### AND a.deleted + t.deleted = 0 AND a.pid IN (###PIDS###) AND t.pid IN (###PIDS###)
		 GROUP BY a.uid
		 ORDER BY u.name,t.nachname,t.vorname DESC';

	/**
	 *
	 * Enter description here ...
	 * @param Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung
	 * @param integer $guestonly : 1=nur gäste, 0=alle, -1 =alle außer gäste
	 */
	public function getvalidAnmeldungenByVeranstaltung(Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung, $guestonly=null){
		$sql = $this->getQuery(self::QUERY_VALID_ANMELDUNG);
		switch ($guestonly) {
			case 1:
				$sql=str_replace('###FEUSER###', 'AND t.feuser=0 ', $sql);
				break;
			case -1:
				$sql=str_replace('###FEUSER###', 'AND t.feuser!=0 ', $sql);
				break;
			default:
				$sql=str_replace('###FEUSER###', '', $sql);
			break;
		}
		$query = $this->createQuery();
		$query->statement ( $sql, array ( $veranstaltung->getUid() ));
		Return $query->execute();


	}
	/**
	 *
	 * Enter description here ...
	 * @param Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung
	 */
	public function getByVeranstaltung(Tx_IfpCurriculum2_Domain_Model_Veranstaltung $veranstaltung){
		$sql = $this->getQuery(self::QUERY_ANMELDUNG);

		$query = $this->createQuery();
		$query->statement ( $sql, array ( $veranstaltung->getUid() ));
		Return $query->execute();


	}
}
?>